/*
 * Copyright:  2018 smarabbit studio.
 *
 * Licensed under the Confluent Community License; you may not use this file except in
 * compliance with the License.  You may obtain a copy of the License at
 *
 * http://www.confluent.io/confluent-community-license
 *
 *  Unless required by applicable law or agreed to in writing, software distributed under
 *  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 *  either express or implied.  See the License for the specific language governing
 *  permissions and limitations under the License.
 *
 *  @作   者： 黄开晖 (117227773@qq.com)
 *  @日   期:    2020/8/15 下午1:34
 *
 */

package com.massyframework.beanskin.graphql.fetching;

import graphql.execution.ExecutionContext;
import graphql.execution.ExecutionStrategyParameters;
import graphql.execution.MergedField;
import graphql.schema.GraphQLObjectType;

/**
 * {@link MergedFieldFactory}, 组合字段工厂
 */
@FunctionalInterface
public interface MergedFieldFactory<T> {

    /**
     * 创建组合字段
     * @param executionContext {@link ExecutionContext}, 执行上下文
     * @param parameters {@link ExecutionStrategyParameters}, 执行策略参数
     * @param fetchedObject {@link Object}, 对象实例
     * @param objectType {@link GraphQLObjectType}, GraphQL类型
     * @return {@link MergedField}, 可能返回null.
     */
    MergedField createMargedField(ExecutionContext executionContext,
                               ExecutionStrategyParameters parameters,
                               T fetchedObject,
                               GraphQLObjectType objectType);
}
